var YuOS = function(config){
	var os = this;
	
	//运行中变量
	var vars = {
			'win_height' : 'auto',				//窗口高（此值在运行中重新计算）
			'win_width' : 'auto',				//窗口宽（此值在运行中重新计算）
			'app_contner_padding_x' : 60,		//应用框左右边距
			'app_contner_padding_top' : 60, 	//应用框上边距
			'app_contner_padding_bottom' : 60,	//应用框下边距
			'main_nav_bar_position' : 'left',	//主菜单栏位置，可以为：left | top | right
			'main_nav_bar_length' :	500,		//主菜单栏长度（最长的）
			'main_nav_bar_height' :	50,			//主菜单栏高度（并非实际高），位置在左右时，即为宽度
			'app_coin_size' : 64,				//应用程序图标大小（正方形）
			'app_coin_margin_x' : 20,			//应用程序图标左右边距
			'app_coin_margin_y' : 10,			//应用程序图标上下边距
			'app_coin_layout' : 'center',		//应用程序图标排列：center | left
			'boxs' : []
	};
	
	vars = $.extend(vars, config);
	
	/**
	 * 初始化应用程序容器
	 * @return
	 */
	var init_app_container = function(init_sortable, sortable_handle_index){
		if(init_sortable==null)
			init_sortable = true;
		var app_content_height = vars.win_height - vars.app_contner_padding_top - vars.app_contner_padding_bottom;
		var app_content_width = vars.win_width - 2 * vars.app_contner_padding_x;
		$("#app_contenter").css({
			left : vars.app_contner_padding_x,
			width : app_content_width,
			height : app_content_height
		});
		//计算grid的宽、高
		var grid_width = $("#app_contenter .app_coin:eq(0)").width() + 2 * vars.app_coin_margin_x;
		var grid_height = $("#app_contenter .app_coin:eq(0)").height() + 2 * vars.app_coin_margin_y;
		var app_count = $("#app_contenter .app_coin").length;
		
		//更新app图标
		if(vars.app_coin_layout == 'center'){
			var app_row_count = Math.floor(app_content_width / grid_width);
			var app_contenter_div_width = 0;
			if(app_count > app_row_count){
				app_contenter_div_width = app_row_count * grid_width;
			}else{
				app_contenter_div_width = app_count * grid_width;
			}
			$('#app_contenter').css({'text-align' : 'center'}).find('#app_contenter_div').removeAttr('style').css({width : app_contenter_div_width});
			$("#app_contenter .app_coin").removeAttr('style');
		}else if(vars.app_coin_layout == 'left'){
			//计算一列可以放多少icon
			var app_col_count = Math.floor(app_content_height / grid_height);
			
			//设置容器大小
			$('#app_contenter_div').css({
				width:Math.ceil(app_count / app_col_count) * grid_width, 
				height:app_content_height
			}).parent().css('text-align', 'left');
			
			$("#app_contenter .app_coin").each(function(i){
				if(sortable_handle_index!=null && sortable_handle_index==i)
					return;
				
				//重新计算位置
				var left = Math.floor(i / app_col_count) * grid_width;
				var top = (i % app_col_count) * grid_height;
				$(this).css({'position' : 'absolute', top:top, left:left});
			});
		}
		$("#app_contenter img,#main_nav_bar .contenter img").auto_img();
		
		if(init_sortable){
			if(vars.app_coin_layout == 'left'){
				$("#app_contenter_div").sortable({
					items: 'div', 
					revert : false,
					change : function(event, ui){
						ui.placeholder.after(ui.helper);
						ui.placeholder.removeClass('app_coin');
						//重新排列
						init_app_container(false);
					},
					stop : function(){
						//重新排列
						init_app_container(false);
					}
				});
			}else{
				$("#app_contenter_div").sortable();
			}
		}
	};
	
	/**
	 * 设置App图标的排列
	 * @param layout：left | center
	 */
	this.set_app_layout = function(layout){
		vars.app_coin_layout = layout;
		os.win_resize();
		
	};
	
	/**
	 * 当窗口大小变化时
	 * @return
	 */
	this.win_resize = function(){
		//窗体规格
		vars.win_height = $(window).height();
		vars.win_width = $(window).width();
		
		init_bg_img();
		init_app_container(true);
		init_main_nav_bar();
	};
	
	/**
	 * 初始化主菜单栏样式
	 */
	var init_main_nav_bar = function(){
		$("#main_nav_bar").attr('class', vars.main_nav_bar_position + '_bar');
		var css_animate = {}, css = {};
		if(vars.main_nav_bar_position == 'left'){
			//左边显示时
			var top = (vars.win_height - vars.main_nav_bar_length)/2;
			if(top<0)
				top = 0;
			css_animate = {top:top, left:0, height:vars.main_nav_bar_length, width:vars.main_nav_bar_height};
			css = {right : 'auto'};
		}else if(vars.main_nav_bar_position == 'right'){
			//右边显示时
			var top = (vars.win_height - vars.main_nav_bar_length)/2;
			if(top<0)
				top = 0;
			css_animate = {top : top, right : 0, height : vars.main_nav_bar_length, width : vars.main_nav_bar_height};
			css = {left : 'auto'};
		}
		
		$("#main_nav_bar").css(css).dequeue().animate(css_animate);
	};
	
	/**
	 * 初始化背景图片大小
	 * @return
	 */
	var init_bg_img = function(){
		$("#bg_div, #bg_div img").css({height:vars.win_height, width:vars.win_width});
	};
	
	/**
	 * 重新设置主导航栏位置
	 */
	this.set_main_nav_position = function(position){
		$("#main_nav_bar").attr('class', position + '_bar');
		vars.main_nav_bar_position = position;
		os.win_resize();
	};
	
	var init_app_coin = function(){
		
	};
	
	/**
	 * 显示弹出窗口
	 */
	this.box = function(box_config){
		if(box_config == null) box_config = {};
		
		if(typeof(box_config.id) == 'undefined'){
			box_config.id = 'common';
		}
		if(vars.boxs[box_config.id]==null){
			var config = {
					src : null,				//事件对象
					id : 'common',			//一个ID的窗口只有一个
					title : 'YuOS', 		//窗口标题
					url : '',				//窗口打开链接
					width : 800,			//窗口宽
					height: 450,			//窗口高
					max : true,				//是否支持最大化
					min : true,				//是否支持最小化
					box : 'normal',			//窗口打开时默认状态：max | min | normal
					x : 0,					//窗口位置X坐标，此值由动态生成
					y : 0,					//窗口位置Y坐标，此值由动态生成
					position : 'center',	//窗口位置有：'center', 'left', 'right', 'top', 'bottom'
					modal : false,			//是否有lightbox效果
					draggable : true,		//是否支持拖拉
					maxHeight : false,		//最大高度
					maxWidth : false,		//最大宽度
					resizable : true,		//是否支持重新拖拉大小
					status : 'normal',		//当前窗口状态max | min | normal
					dragStart: function(event, ui){
						$(event.target).hide().parents('.ui-dialog').css({'opacity':0.8});
					},
					dragStop : function(event, ui){
						$(event.target).show().parents('.ui-dialog').css({'opacity':1});
					},
					resizeStart : function(event, ui){
						$(event.target).hide().parents('.ui-dialog').css({'opacity':0.8});
					},
					resizeStop : function(event, ui){
						$(event.target).show().parents('.ui-dialog').css({'opacity':1});
					}
			};
			//合并
			config = $.extend(config, box_config);
			vars.boxs[config.id] = config;
		}else{
			config = vars.boxs[box_config.id];
		}
		if($("#box_id_" + config.id).length){
			//如果已经存在，或者已经生成过了，则直接显示
			$("#box_id_" + config.id).dialog(config);
			if(config.status == 'min'){
				$("#box_id_" + config.id).parents('.ui-dialog').fadeIn();
			}
		}else{
			//如果还没有打开过此Box，则生成
			$html = '<div id="box_id_' + config.id + '" box_id="' + config.id + '" class="box_frame"><iframe frameborder="0" border="0" class="box_iframe" name="iframe_' + config.id + '" id="iframe_' + config.id + '"></iframe></div>';
			$("body").append($html);
			//定义resize事件
			config['resize'] = function(event, ui){
				$("#iframe_" + config.id).css({height:ui.size.height - 50});
			};
			//定义打开事件
			config['open'] = function(event, ui){
				//重新设置宽高
				var height = $("#box_id_" + config.id).height();
				$("#iframe_" + config.id).css({height:height});
				//加载按钮
				var $dialog = $(this);
                var atext = $(".ui-dialog-titlebar-close").replaceWith('<p id="box_c_' + config.id + '" class="ui-xlgwr"><span class="ui-icon ui-icon-minusthick">minusthick</span> <span class="ui-icon ui-icon-extlink">extlink</span><span class="ui-icon ui-icon-closethick">close</span></p>');
                $("#box_c_" + config.id +">span").click(function(){
                    var spantext = $(this).text();
                    if (spantext == "extlink") {
                    	var box_height = 0;
                    	if(config.status == 'normal'){
                    		//当前是原始大小，则最大化之
                    		var dio_box_offset = $dialog.parents('.ui-dialog').offset();
                    		config.last_position = {left:dio_box_offset.left, top:dio_box_offset.top};
                    		
                    		//保存原始大小
	                        $dialog.dialog({
	                            position: ['left', 'top'],
	                            width: vars.win_width,
	                            height: vars.win_height
	                        });
	                        box_height = vars.win_height;
	                        config.status = 'max';
	                        //更换图标
	                        $(this).removeClass('ui-icon-extlink').addClass('ui-icon-newwin');
                    	}else if(config.status == 'max'){
                    		$dialog.dialog({
                    			position : 'center',
                    			width : config.width,
                    			height : config.height
                    		});
                    		$dialog.parents('.ui-dialog').css(config.last_position);
                    		config.status = 'normal';
                    		box_height = config.height;
	                        $(this).removeClass('ui-icon-newwin').addClass('ui-icon-extlink');
                    	}
                    	$("#iframe_" + config.id).css({height:box_height - 50});
                    } else if (spantext == "minusthick") {
                        $dialog.parents('.ui-dialog').fadeOut(function(){
                        	$("#task_bar .task[box_id='"+config.id+"']").removeClass('cur_task');
                        	config.status = 'min';
                        });
                    } else if (spantext == "close") {
                    	$dialog.parents('.ui-dialog').fadeOut(function(){
                    		$dialog.dialog("destroy");
                    		$("#box_id_" + config.id).remove();
                    		//删除任务栏
                    		$("#task_bar .task[box_id='"+config.id+"']").remove();
                    	});
                    }
                });
                
			}
			$("#box_id_" + config.id).dialog(config);
			//添加任务栏
			var img = $(config.src).find('img').attr('src').replace('64x64','32x32');
			var title = $(config.src).attr('title');
			$("#task_bar .cur_task").removeClass('cur_task');
			var task = $('<a class="task cur_task" box_id="'+config.id+'" href="javascript:void(0)"><img style="margin-top: 4px;" src="'+img+'">'+title+'</a>');
			$(task).click(function(){
				var box_id = $(this).attr('box_id');
				$("#box_id_" + box_id).parents('.ui-dialog').fadeIn();
				$(this).addClass('cur_task');
				config.status = 'normal';
					//($("#box_id_" + box_id + " .ui-icon-extlink").length)?'max':'normal';
				//alert(config.status);
			});
			$("#task_bar").append(task);
		}
		$("#iframe_" + config.id).attr('src', config.url);
	};
	
	//初始化
	os.win_resize();
	
	//窗口变化时事件
	window.onresize = os.win_resize;
	
	$(".app_coin a").click(function(){
		var url = $(this).attr("url");
		var title = $(this).attr("title");
		if(title==null|| title==''){
			title = '';
		}
		//获取图标
		var title_icon = $(this).find('img').attr('src').replace('64x64','16x16');
		title = '<img src="'+title_icon+'"/>' + title;
		var options = {
			title : title, url : url, src : this
		};
		if($(this).attr('options')){
			try{
				$self_opt = eval('(' + $(this).attr('options') + ')');
				options = $.extend($self_opt, options);
			}catch(e){}
		}
		os.box(options);
	}).each(function(){
		var title = $(this).attr("title");
		$(this).after('<span>' + title + '</span>');
	});
}




